home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The 640 MEG Shareware Studio 2
/
The 640 Meg Shareware Studio CD-ROM Volume II (Data Express)(1993).ISO
/
basic
/
qbfaqr01.zip
/
SAVESCR.QRM
< prev
next >
Wrap
Text File
|
1992-07-26
|
3KB
|
150 lines
DECLARE SUB SaveScreen ()
DECLARE SUB SaveScreen2 ()
DECLARE SUB SaveScreen3 ()
DECLARE SUB RestoreScreen ()
DECLARE SUB RestoreScreen2 ()
DECLARE SUB RestoreScreen3 ()
DECLARE FUNCTION MaxX% ()
DECLARE FUNCTION MaxY% ()
DECLARE FUNCTION MaxCol% ()
DECLARE FUNCTION MaxRow% ()
'Main program musts
DIM GraphScr%(14000) 'I think this will be enough for any graph screen
DIM TextScr(80, 50) AS STRING * 2 'Two bytes in Text mode to store
'attributes also
COMMON SHARED /ScreenSave/ GraphScr%(), TextScr() AS STRING * 2, ScrnMode%, ErrNum5%
CONST True = -1, FALSE = 0
'Need QB.LIB for RestoreScreen3
'$INCLUDE: 'QB.BI'
'Your main program code goes here
'ScrnMode% must equal to current screen mode at all times!
'Eg.
ScrnMode% = 13
SCREEN ScrnMode%
FOR J = 1 TO 25
LOCATE J
PRINT STRING$(80, "A");
NEXT
SaveScreen
CLS
PRINT "This is a Test!"
SLEEP
RestoreScreen
SLEEP
'...
END
'End of your main program
'Add other checks inside SELECT if needed
ErrorHandler:
SELECT CASE ERR
CASE 5
ErrNum5% = True
RESUME NEXT
END SELECT
'End of Example
'Note that the following routines might be wrong. I've only tested
'these on a VGA monitor
FUNCTION MaxCol%
SELECT CASE ScrnMode%
CASE 0, 3, 4, 8 TO 12
MaxCol% = 80
CASE 1, 7, 13
MaxCol% = 40
END SELECT
END FUNCTION
FUNCTION MaxRow%
SELECT CASE ScrnMode%
CASE 0 TO 4, 7 TO 10, 13
MaxRow% = 25
CASE 11, 12
MaxRow% = 30
END SELECT
END FUNCTION
FUNCTION MaxX%
SELECT CASE ScrnMode%
CASE 1, 7, 13
MaxX% = 320
CASE 2, 4, 8 TO 12
MaxX% = 640
CASE 3
MaxX% = 720
END SELECT
END FUNCTION
FUNCTION MaxY%
SELECT CASE ScrnMode%
CASE 1, 2, 7, 8, 13
MaxY% = 200
CASE 9, 10
MaxY% = 350
CASE 11, 12
MaxY% = 480
CASE 3
MaxY% = 348
CASE 4
MaxY% = 400
END SELECT
END FUNCTION
SUB RestoreScreen
IF NOT ErrNum5% THEN
PCOPY 1, 0
ELSE
IF ScrnMode% > 0 THEN RestoreScreen2 ELSE RestoreScreen3
END IF
END SUB
SUB RestoreScreen2
PUT (0, 0), GraphScr%, PSET
END SUB
SUB RestoreScreen3
DIM InRegs AS RegType, OutRegs AS RegType
Ox = POS(0): Oy = CSRLIN
InRegs.cx = 1
FOR I = 1 TO MaxRow%
FOR J = 1 TO MaxCol%
LOCATE I, J
InRegs.ax = &H900 + ASC(LEFT$(TextScr(J, I), 1))
InRegs.bx = ASC(RIGHT$(TextScr(J, I), 1))
CALL Interrupt(&H10, InRegs, OutRegs)
NEXT
NEXT
LOCATE Oy, Ox
END SUB
SUB SaveScreen
'You should also add your routine here to hide the mouse if you use
'MouseHideCursor
ErrNum5% = FALSE
ON ERROR GOTO ErrorHandler
PCOPY 0, 1
ON ERROR GOTO 0
IF ErrNum5% AND ScrnMode% > 0 THEN SaveScreen2 ELSE SaveScreen3
'If you hid the mouse then restore it -- routines not included here
'MouseShowCursor
END SUB
SUB SaveScreen2
GET (0, 0)-(MaxX% - 2, MaxY% - 2), GraphScr%
END SUB
SUB SaveScreen3
FOR I = 1 TO MaxCol%
FOR J = 1 TO MaxRow%
TextScr(I, J) = ""
TextScr(I, J) = CHR$(SCREEN(J, I)) 'Save char
'Save attribute
TextScr(I, J) = TextScr(I, J) + CHR$(SCREEN(J, I, True))
NEXT
NEXT
END SUB